package 蓝桥杯_2013;

/*
标题:黄金连分数

  黄金分割数0.61803是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
  我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
  比较简单的一种是用连分数:
                 1
黄金数 = ---------------------
                    1
         1  + ---------------
                        1
                1 + ---------
                           1
                     1 + -----
                         1+...

  这个连分数计算的“层数”越多,它的值越接近黄金分割数。
  请你利用这一特性,求出黄金分割数的足够精值,要求四舍五入到小数点后100位
 */

import java.math.BigDecimal;
import java.math.BigInteger;

public class Test02_2013黄金连分数 {
//    public static void main(String[] args) {
//        // 声明两个变量用来存储相邻的两个数
//        double Problems.a = 1.0;
//        double b = 1.0;
//        for (int i = 3; i < 300; i++) {
//            double t = b;
//            b = Problems.a+b;
//            Problems.a = t;
//        }
//        System.out.println(Problems.a/b);
//    }
    public static void main(String[] args) {
        // 声明两个变量用来存储相邻的两个数
        BigInteger a = BigInteger.ONE;
        BigInteger b = BigInteger.ONE;
        for (int i = 3; i < 300; i++) {
            BigInteger t = b;
            b = a.add(b);  // BigInteger中数字相加用add()
            a = t;
        }
        // 将整型数转为高精度浮点数
        // 除的时候用divide()
        BigDecimal divide = new BigDecimal(a,110).divide(new BigDecimal(b,110), BigDecimal.ROUND_HALF_DOWN);
        // 输出的时候将其转为字符串，连“0.”，共103位
        System.out.println(divide.toPlainString().substring(0,103));
    }
}
